package com.luli.test;


import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 陆离
 * 2024/2/23 16:31:05
 */
public class SearchHttpAK {

    public static String URL = "https://api.map.baidu.com/reverse_geocoding/v3?";

    public static String AK = "olQPwzKv9tCCzBVF7g41wFt6jBMIPEto";




    /**
     *
     * @param longitude 精度
     * @param latitude 纬度
     * @return
     * @throws Exception
     */
    public static String getlocale(String longitude,String latitude) throws Exception {
        Map params = new LinkedHashMap<String, String>();
        //AK值
        params.put("ak", AK);
        //输出格式为json或者xml
        params.put("output", "json");
        //坐标的类型，目前支持的坐标类型包括：bd09ll（百度经纬度坐标）、bd09mc（百度米制坐标）、gcj02ll（国测局经纬度坐标，仅限中国）、wgs84ll（ GPS经纬度）
        params.put("coordtype", "wgs84ll");
        //extensions_poi=0，不召回pois数据；extensions_poi=1，返回pois数据（默认显示周边1000米内的poi），并返回sematic_description语义化数据和formatted_address_poi 结构化地址（包含POI信息）
        params.put("extensions_poi", "0");
        //经纬度
        params.put("location", longitude + "," + latitude);

        return requestGetAK(URL, params);
    }

    /**
     * 默认ak
     * 选择了ak，使用IP白名单校验：
     * 根据您选择的AK已为您生成调用代码
     * 检测到您当前的ak设置了IP白名单校验
     * 您的IP白名单中的IP非公网IP，请设置为公网IP，否则将请求失败
     * 请在IP地址为xxxxxxx的计算发起请求，否则将请求失败
     */
    public static String requestGetAK(String strUrl, Map<String, Object> param) throws Exception {
        if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
            return null;
        }

        StringBuffer queryString = new StringBuffer();
        queryString.append(strUrl);
        for (Map.Entry<?, ?> pair : param.entrySet()) {
            queryString.append(pair.getKey() + "=");
            //    第一种方式使用的 jdk 自带的转码方式  第二种方式使用的 spring 的转码方法 两种均可
                queryString.append(URLEncoder.encode((String) pair.getValue(), "UTF-8").replace("+", "%20") + "&");
//            queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
        }

        if (queryString.length() > 0) {
            queryString.deleteCharAt(queryString.length() - 1);
        }

        java.net.URL url = new URL(queryString.toString());
        System.out.println("请求地址：" + queryString.toString());
        URLConnection httpConnection = (HttpURLConnection) url.openConnection();
        httpConnection.connect();

        InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
        BufferedReader reader = new BufferedReader(isr);
        StringBuffer buffer = new StringBuffer();
        String line;
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        reader.close();
        isr.close();
//        System.out.println("AK: " + buffer.toString());
        return buffer.toString();
    }


    public static void main(String[] args) throws Exception {
        String getlocale = getlocale("31.225696563611", "121.49884033194");
        System.out.println(getlocale);
        JSONObject jsonObject = JSONObject.parseObject(getlocale);
        Object result = jsonObject.get("result");
        JSONObject jsonObject1 = JSONObject.parseObject(String.valueOf(result));
        System.out.println(jsonObject1.get("business"));
        System.out.println(jsonObject1.get("formatted_address"));
        System.out.println();
    }
}
